#ifndef _TREE_H_
#define _TREE_H_

#include "../../embeddable/Embeddable.h"

/*
	class : Node
	desc : creates a binary node to be used by the tree.
*/
template<typename Data>
class Node
{
	public:
		//data in the node
		Data value;
		//left Node
		Node* left;
		//right Node
		Node* right;
		//default constructor
		Node();
};
//assumes I have a > and == operator defined for this to work
template<typename Data> 
class Tree
{
	private:

		
	public:
		//root of the tree
		Node<Data>* root;
		//default constructor
		Tree();
		//adds data to the tree
		void add(Data value); 
		//removes data from the tree
		void remove(Data value);
		//deletes all data from the tree.
		void deleteAll(Node<Data>* r);
		//finds if data is in the tree.
		Node<Data>* find(Data value);
		//recursive find used by find
		Node<Data>* recursiveFind(Data value, Node<Data>* r);
		//finds the parent of a node if it is in the tree
		//or what would be the parent if it were.
		Node<Data>* findParent(Data value, Node<Data>* r);
		//destructor for the tree.
		~Tree();
};


#include "Tree.cpp"

#endif
